Android — Notification

前言

今天来学一下Notification,总体来说还是很简单的,类似DIalog,但是在现在第三方ROM定制的泛滥的时代,Notification有时候并不能如愿正常工作。其实以小米MIUI系统为代表……

Notification即通知,算了,一图胜千言:

这是最传统的一种,还可以自定义做成音乐播放的那样通知:

其实Notification还是有很多知识点和坑的。

我当当猫在我的小米2真机测试时,发现小米的Notification只会显示大图标、标题和内容,不会显示小图标。但是,如果在代码中不设置小图标,则会Crash。异常如下:

1
Caused by: java.lang.IllegalArgumentException: Invalid notification (no valid small icon):

一个传统的Notification如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void showNotification(View view) {
Toast.makeText(mContext, "2333", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("当当猫,你这么说?") //标题
.setContentText("你就是欺负我咪咪兔") //内容
.setTicker("收到一条可爱的通知") //收到消息后状态栏显示的文字信息
.setWhen(System.currentTimeMillis()) //设置通知时间
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) //设置大图标
.setSmallIcon(R.drawable.small_icon)
.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE) //设置默认的三色灯和振动
.setAutoCancel(true) //设置点击后取消Notification
.setContentIntent(pendingIntent); //设置PendingIntent
mNotification = builder.build();
mManager.notify(NOTIFID_1, mNotification); //发送通知
}

当然,我们还可以自定义样式,这就要用到了RemoteViews了,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void customNotification(View view) {
Toast.makeText(mContext, "2333", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
Notification.Builder builder = new Notification.Builder(this);
builder.setTicker("收到一条可爱的通知") //收到消息后状态栏显示的文字信息
.setWhen(System.currentTimeMillis()) //设置通知时间
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) //设置大图标
.setSmallIcon(R.drawable.small_icon)
.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE) //设置默认的三色灯和振动
.setAutoCancel(true) //设置点击后取消Notification
.setContentIntent(pendingIntent); //设置PendingIntent
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_notification);
remoteViews.setImageViewResource(R.id.iv_custom, R.mipmap.ic_launcher);
remoteViews.setTextViewText(R.id.tv_customTitle, "小半");
remoteViews.setTextViewText(R.id.tv_customContent, "陈粒");
builder.setContent(remoteViews);
mNotification = builder.build();
mManager.notify(NOTIFID_1, mNotification);
}

最后

本文讲的很浅显,因为这些在工作中差不多就够用了,如果想深入Notification,我建议看一下文章,也是我精心挑选出来的。

http://blog.csdn.net/vipzjyno1/article/details/25248021

https://www.jianshu.com/p/630f44bacf99

http://www.runoob.com/w3cnote/android-tutorial-notification.html

我们一直都向往,面朝大海,春暖花开。 但是几人能做到,心中有爱,四季不败?